﻿using System.Text;
using System.Windows.Forms;
using log4net.Appender;
using log4net.Config;
using log4net.Layout;

namespace SopCastRecorder
{
	public class Log4NetManager
	{
		public static string[] LogFilePaths = { Application.StartupPath + @"\error.log", Application.StartupPath + @"\error.log.1" };

		public static void Init()
		{
			var appender = new RollingFileAppender()
			{
				File = LogFilePaths[0],
				Layout = new PatternLayout()
				{
					ConversionPattern = "%d - %m%n"
				},
				AppendToFile = true,
				RollingStyle = RollingFileAppender.RollingMode.Composite,
				MaximumFileSize = "1MB",
				Encoding = Encoding.Unicode
			};
			((PatternLayout)appender.Layout).ActivateOptions();
			appender.ActivateOptions();
			BasicConfigurator.Configure(appender);
		}
		//public static void Init()
		//{
		//    /**************************************************************************/

		//    // RollingFileAppender をインスタンス化し、色々とプロパティをセットする
		//    log4net.Appender.RollingFileAppender rfa = new log4net.Appender.RollingFileAppender();

		//    // -------------------------------------------------------------------------
		//    // AppenderSkelton
		//    // -------------------------------------------------------------------------
		//    // Appender名
		//    rfa.Name = "sample_Log4netForConsole";

		//    // ログはレベルによらず全部出力する
		//    /*
		//        Level.Off       = int.MaxValue
		//        Level.Emergency = 120000
		//        Level.Fatal     = 110000
		//        Level.Alert     = 100000
		//        Level.Critical  = 90000
		//        Level.Error     = 70000
		//        Level.Warn      = 60000
		//        Level.Notice    = 50000
		//        Level.Info      = 40000
		//        Level.Debug     = 30000
		//        Level.Fine      = 30000
		//        Level.Trace     = 20000
		//        Level.Finer     = 20000
		//        Level.Verbose   = 10000
		//        Level.Finest    = 10000
		//        Level.All       = int.MinValue
		//    */
		//    rfa.Threshold = log4net.Core.Level.All;

		//    // ログに出力する文字列のフォーマット
		//    /*
		//        PatternLayout <-- たいていこれを使用する
		//        RawPropertyLayout;
		//        RawTimeStampLayout;
		//        RawUtcTimeStampLayout;
		//        XmlLayout;
		//    */
		//    rfa.Layout = new PatternLayout()
		//    {
		//        ConversionPattern = "%d [%t] %-5p - %m%n"
		//    };

		//    // -------------------------------------------------------------------------
		//    // TextWriterAppender
		//    // -------------------------------------------------------------------------
		//    // ログメッセージをバッファリングせず、毎回ログファイルに吐き出すかどうか
		//    rfa.ImmediateFlush = true;

		//    // -------------------------------------------------------------------------
		//    // FileAppdender
		//    // -------------------------------------------------------------------------
		//    // ログファイル名(フルパスじゃないとだめなので注意する)
		//    rfa.File = Application.StartupPath + "\\error.log";

		//    // すでにログファイルがあった場合は追記するかどうか
		//    rfa.AppendToFile = true;

		//    // 出力ファイルの文字コード
		//    rfa.Encoding = System.Text.Encoding.UTF8;

		//    // よくわかりません..(誰か教えて)
		//    rfa.SecurityContext = log4net.Core.SecurityContextProvider.DefaultProvider.CreateSecurityContext(null);

		//    // ファイルロック方法を指定する
		//    /*
		//        FileAppender.ExclusiveLock
		//        FileAppender.MinimalLock
		//    */
		//    rfa.LockingModel = new log4net.Appender.FileAppender.ExclusiveLock();

		//    // -------------------------------------------------------------------------
		//    // RollingFileAppdender
		//    // -------------------------------------------------------------------------
		//    // ログファイルの最大サイズを指定する(以下の2行どちらかでOK)
		//    rfa.MaxFileSize = 1024 * 1024 * 1;
		//    //rfa.MaximumFileSize = "10M";

		//    // 日付でローテーションする場合は、以下の形式でファイル名を作成する
		//    //rfa.DatePattern = ".yyyy---MM---dd.log";

		//    // ローテーションするファイルの数
		//    rfa.MaxSizeRollBackups = 1;

		//    // ローテーションする場合、連番の数字を使いまわすかどうか
		//    rfa.CountDirection = -1;

		//    // ローテーションする条件を指定する(サイズ、日付)
		//    /*
		//        log4net.Appender.RollingFileAppender.RollingMode.Date;		日付が変更されたらローテーション
		//        log4net.Appender.RollingFileAppender.RollingMode.Once;		起動時1回だけローテーション実施
		//        log4net.Appender.RollingFileAppender.RollingMode.Size;		指定サイズ
		//        log4net.Appender.RollingFileAppender.RollingMode.Composite;	日付 or サイズの両方
		//    */
		//    rfa.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;

		//    // ログを出力するファイルを常に同じファイル名とするかどうか
		//    rfa.StaticLogFileName = false;

		//    // -------------------------------------------------------------------------
		//    // おまじない
		//    // -------------------------------------------------------------------------
		//    rfa.ActivateOptions();
		//    /**************************************************************************/

		//    log4net.Config.BasicConfigurator.Configure(rfa);

		//    //var logger = log4net.LogManager.GetLogger("sample_Log4netForConsole");

		//    //logger.Debug("ほげほげ");
		//    //logger.Error("ふがふが");
		//}
	}
}
